package com.holyn.guofang.model.webhttp.observable;

import com.holyn.guofang.model.webhttp.wo.StatusWo;
import com.holyn.guofang.model.webhttp.wo.UpdateInfoWo;
import com.holyn.guofang.model.webhttp.wo.UserInfoWo;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by Holyn on 2017/6/28.
 */

public interface UserUnLoginObservable {

    /**
     * 获取版本更新信息
     *
     * @param platformID 平台 ID(1:安卓，2:IOS)
     * @param version 客户端系统版本
     * @return
     */
    @FormUrlEncoded
    @POST("platformUpdate.ashx")
    Observable<UpdateInfoWo> platformUpdate(
            @Field("platformID") Integer platformID,
            @Field("version") Integer version);

    /**
     * 获取注册验证码
     *
     * @param userName 账号
     * @param checkMethod 验证方法(1:手机短信，2:电子邮箱)
     * @param equipmentCode 手机号码或电子邮箱
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:账号重复，-2: 手机号码重复，-3:电子邮箱重复，-4:验证码不匹 配，-5:验证次数超过限制，-6:一分钟内请求超过 1次)
     * token=guofangidenthand075766633966
     */
    @FormUrlEncoded
    @POST("getRegisterCode.ashx")
    Observable<StatusWo> registerCode(
            @Field("userName") String userName,
            @Field("checkMethod") Integer checkMethod,
            @Field("equipmentCode") String equipmentCode);

    @FormUrlEncoded
    @POST("getRegisterCodeb.ashx")
    Observable<StatusWo> registerCodeb(
            @Field("userName") String userName,
//            @Field("checkMethod") Integer checkMethod,
            @Field("equipmentCode") String equipmentCode);

    /**
     * 用户注册
     *
     * @param userName 账号
     * @param password 密码(经 32 位 MD5 加密)
     * @param checkMethod 验证方法(1:手机短信，2:电子邮箱)
     * @param mobile 手机号码
     * @param email 电子邮箱
     * @param name 真实姓名
     * @param validCode 手机或 EMAIL 接收到的验证码
     * @param isInstitution 是否商标代理机构(1:是，0:否)
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:账号重复，-2: 手机号码重复，-3:电子重复，-4:验证码不匹配， -5:手机或 EMAIL 接收到的验证码不匹配)
     */
    @FormUrlEncoded
    @POST("register.ashx")
    Observable<StatusWo> register(
            @Field("userName") String userName,
            @Field("password") String password,
            @Field("checkMethod") Integer checkMethod,
            @Field("mobile") String mobile,
            @Field("email") String email,
            @Field("name") String name,
            @Field("validCode") String validCode,
            @Field("isInstitution") Integer isInstitution);


    @FormUrlEncoded
    @POST("registerb.ashx")
    Observable<StatusWo> registerb(
            @Field("regType") Integer regType,
            @Field("mainMobile") String mainMobile,
            @Field("mobile") String mobile,
            @Field("validCode") String validCode,
            @Field("isInstitution") Integer isInstitution);

    /**
     * 登录
     *
     * @param userName 账号或手机号码或邮箱
     * @param password 密码(经 32 位 MD5 加密)
     *
     * @return
     *
     *      1、android平台验证码platformCheckCode ：notiossdu76yhnbgfi98
     *      2、随机字符串rand ：数字或字母（不分大小写），长度不限制，最好10位左右，不要太短。
     *
     * 操作是否成功(1:是，0:否，-1:账号或密码错误， -2:需要验证(此时需要给用户输入验证码，输入 验证码后调用接口 2.3.4更换主设备登录验证)，
     *          -3:验证码不匹配，-4: 设备授权已达上限，-5:已有其他用户绑定了该设 备并授权，-6:同一设备一分钟内验证超过 1 次，-7: 需要先授权设备)
     *
     */
    @FormUrlEncoded
    @POST("login.ashx")
    Observable<UserInfoWo> login(
            @Field("userName") String userName,
            @Field("password") String password
    );


    @FormUrlEncoded
    @POST("loginb.ashx")
    Observable<UserInfoWo> loginb(
            @Field("userName") String userName,
            @Field("validCode") String validCode
    );

    /**
     * 更换主设备后进行登录验证
     *
     * @param userName 账号或手机号码或邮箱
     * @param validCode 手机号码或电子邮箱接收到的验证码
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:账号错误，-2:手 机号码或电子邮箱接收到的验证码不匹配，-3:验 证码不匹配，-4:用户登录信息不存在)
     */
    @FormUrlEncoded
    @POST("loginCheck.ashx")
    Observable<UserInfoWo> loginCheck(
            @Field("userName") String userName,
            @Field("validCode") String validCode
    );

    /**
     * 获取密码重置的验证码
     *
     * @param checkMethod 验证方法(1:手机短信，2:电子邮箱)
     * @param equipmentCode 手机号码或电子邮箱
     *
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:手机号码或电子 邮箱不存在，-2:验证码不匹配，-3:验证次数超过 限制，-4:一分钟内请求超过 1 次)
     */
    @FormUrlEncoded
    @POST("getPasswordCode.ashx")
    Observable<StatusWo> getPasswordCode(
            @Field("checkMethod") Integer checkMethod,
            @Field("equipmentCode") String equipmentCode);

    /**
     * 密码重置
     *
     * @param checkMethod 验证方法 (1:手机短信，2:电子邮箱)
     * @param equipmentCode 手机号码或电子邮箱
     * @param validCode 手机号码或电子邮箱收到的验证码
     * @param password 新密码(经 32 位 MD5 加密)
     * @return
     *
     * 成功返回：status 操作是否成功(1:是，0:否，-1:手机号码或电子 邮箱不存在，-2:手机或电子邮箱收到的验证码不 匹配，-3:验证码不匹配)
     */
    @FormUrlEncoded
    @POST("changePasswordCode.ashx")
    Observable<StatusWo> changePasswordCode(
            @Field("checkMethod") Integer checkMethod,
            @Field("equipmentCode") String equipmentCode,
            @Field("validCode") String validCode,
            @Field("password") String password);

    /**
     * 根据设备码进行用户自动登录
     *
     * @return
     *
     * 操作是否成功(1:是，0:否，-1:登录设备未注 册，-2:设备未授权，-3:没有对应的用户信息，-4: 验证码不匹配)
     */
    @FormUrlEncoded
    @POST("autoLogin.ashx")
    Observable<UserInfoWo> autoLogin(
            @Field("time") String time
    );
}
